#include "mainwindow.hpp"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
	// Zone Central
	_centralArea = new QWidget;
	setCentralWidget(_centralArea);
	_statusBar = statusBar();

	_layout = new QHBoxLayout;
	_centralArea->setLayout(_layout);

	_mapView = new MapView(_centralArea, _statusBar);
	_layout->addWidget(_mapView);

	_dockWidget = new DragDockWidget;
	_map = new Map(_mapView);
	_mapConfig = new MapConfig(this);

	// Mis en place du Dock
	addDockWidget(Qt::LeftDockWidgetArea, _dockWidget);

	// On envoit un pointeur de la map à _map_config
	_mapConfig->setMap(_map);
	QLabel *dk = new QLabel;
	dk->setPixmap(QPixmap("DonkeyKongLeft.png"));

	// Creation des differents élément
	createMenu();
	createActions();
}

void MainWindow::createMenu() {
	_fileMenu = menuBar()->addMenu("&Fichier");
	_mapMenu = menuBar()->addMenu("&Carte");
}

void MainWindow::createActions() {
	// Action du Menu Fichier
	_fileNewMap = _fileMenu->addAction("Nouveau");
	connect(_fileNewMap, SIGNAL(triggered()), this, SLOT(newMap()));

	_fileOpenMap = _fileMenu->addAction("Ouvrir");
	connect(_fileOpenMap, SIGNAL(triggered()), this, SLOT(openMap()));

	_fileSaveMap = _fileMenu->addAction("Enregister");
	connect(_fileSaveMap, SIGNAL(triggered()), this, SLOT(saveMap()));

	_fileMenu->addSeparator();

	_fileQuit = _fileMenu->addAction("Quitter");
	connect(_fileQuit, SIGNAL(triggered()), qApp, SLOT(quit()));

	// Action du Menu Carte
	_mapResizeMap = _mapMenu->addAction("Redimensionner");
	_mapProperty = _mapMenu->addAction("Propriété");
	connect(_mapProperty, SIGNAL(triggered()), _mapConfig, SLOT(exec()));
}

void MainWindow::closeEvent(QCloseEvent *event) {
	if(_map->hasChanged()) {
		QMessageBox::StandardButton answer = QMessageBox::warning(this, "Enregister les modifications",
							 "le fichier à été modifié.\n Voulez vous enregister les modifications. ?",
									   QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);

		if(answer == QMessageBox::Yes) {
			if(!_map->save())
				event->ignore();
		}
		else if(answer == QMessageBox::Cancel)
			event->ignore();
		else
			event->accept();
	}
	else event->accept();
}

void MainWindow::saveMap() {
	_map->save();
}

void MainWindow::newMap() {
	_mapConfig->clear();
	_map->clear();
	_mapView->clear();
}
void MainWindow::openMap() {
	// On efface toutes les donnés de la précedent map
	// avant d'ouvrir une autre.
	_mapConfig->clear();
	_map->clear();
	_mapView->clear();

	_map->OpenMap();
	_mapConfig->refresh();
}
